package com.shbaiche.bifenba.net;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.security.GeneralSecurityException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GzipCompressUtils
{
	private static String encode = "UTF-8";

	public static String compress(String str) throws Exception
	{
		// 创建一个新的 byte 数组输出流
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		// 使用默认缓冲区大小创建新的输出流
		GZIPOutputStream gzip = new GZIPOutputStream(out);
		// 将 b.length 个字节写入此输出流
		gzip.write(str.getBytes(encode));
		gzip.close();
		return Base64.encode(out.toByteArray());
	}

	public static String unCompress(String data) throws Exception
	{
		byte[] a = Base64.decode(data);
		// 创建一个新的 byte 数组输出流
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		// 创建一个 ByteArrayInputStream，使用 buf 作为其缓冲区数组
		ByteArrayInputStream in = new ByteArrayInputStream(a);
		// 使用默认缓冲区大小创建新的输入流
		GZIPInputStream gzip = new GZIPInputStream(in);
		byte[] buffer = new byte[256];
		int n = 0;
		// 将未压缩数据读入字节数组
		while ((n = gzip.read(buffer)) >= 0)
		{
			// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte数组输出流
			out.write(buffer, 0, n);
		}
		return out.toString(encode);
	}
	
	public static void main(String[] args) throws GeneralSecurityException
	{
		try
		{
			String data= "f66cfdb9b89074efcee5e5de9e13273c";
			//System.out.println(GzipCompressUtils.compress(data));
			//System.out.println(GzipCompressUtils.unCompress(GzipCompressUtils.compress(data)));
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
	}
}
